// main/ipc/ipc-router.ts
import { ipcMain, IpcMainInvokeEvent, BrowserWindow } from 'electron'
import windowHandlers from './handlers/window' // 窗口管理相关处理程序
import system from './handlers/system' // 手动引入模块处理程序

export default async function registerIpcRouter() {
  // 收集所有处理器
  const handlers: any = {
    ...windowHandlers,
    ...system
  }

  /**
   * 注册全局的 'custom-ipc-request' 事件
   * 渲染进程通过此接口向主进程发送 API 请求
   */
  ipcMain.handle('custom-ipc-request', async (event: IpcMainInvokeEvent, { api, data }) => {
    // 获取触发事件的窗口
    const win = BrowserWindow.fromWebContents(event.sender)

    // 根据 API 路径找到对应的处理函数
    const handler = handlers[api]

    if (!handler) throw new Error(`No handler11 for ${api} ${data}`) // 如果找不到对应处理器，抛出异常

    // 执行处理器，并将结果返回给渲染进程
    return handler(data, event, win)
  })
}
